Date		:	29 MARS 1992
		Programme	:	CSHOW V8.32A
		Protection	:	
		Fichier		:	CSHOW.EXE
		Temps pass�	:	30 minutes
		Soci�t�		:	SHAREWARE
		Outils		:	SOFT-ICE V2.50
		Divers		:	CONFECTION D'UN LANCEUR COM
		Origine		:	L.F.
		Num�ro		:	169


	Ce fichier pr�sente l'ultime agacement d'une part de faire attendre
	l'utilisateur au d�but du programme pendant 15 secondes si un ou
	plusieurs fichiers drivers sont manquant ( ce qui n'en emp�che pas
	le fonctionnement ). De plus lorsque l'on quitte le soft celui-ci
	affiche systematiquement un ecran shareware.

	Le programme �tant crypt� par PKLITE avec l'option UNEXPANDABLE j'ai
	simplement rep�r� les diff�rentes routines � supprimer et pass� les
	deux offsets des IP au lanceur ainsi que les patchs � effectuer.

	1) Le CALL qui effectue l'affichage du tableau pendant 15 secondes
	   peut �tre contourn� par un test situ� en amont ( forc�ment ! ).

		Il suffit de forcer le saut se trouvant en:

		 ADR_IP1	CS:B89B 7408	JZ 	---> 	7508	JNZ

	2) Le message de fin se trouve dans le CALL situ� en:

		 ADR_IP2	CS:B9CE E831..	CALL	--->	EB01	JMP

	Ci-dessous le lanceur:
 
;       PATCH POUR LE PROGRAMME CSHOW ( shareware )
;       DETOURNEMENT DE L'INT 1C
;
;******************************************************************************
;                             ZONE A INITIALISER

adr_ip1         equ     0b89bh  ; adresse dont le contenu est � modifier.
				; Cette valeur est "directe"
adr_ip2		equ     0b9ceh  ; seconde valeur d'IP � rechercher.
				; Cette valeur est "directe"
anc_val         equ     0874h   ; Valeur d'origine � rechercher. ( 7408 )
nouv_val        equ     0875h   ; Nouvelle valeur.		 ( 7508 ) 
anc_val1	equ     31e8h	; E831..	CALL 
nouv_val1	equ	01ebh	; EB01		JMP +1
 
INT_DET         equ     1Ch     ; Le num�ro de l'INT que l'on veut utiliser.
BEEP_TONE       EQU     440     ; Beep tone in hertz
BEEP_DURATION   EQU     0ffffh          
;CARTE_OUT_AL	equ	1	; Si 1 on assemble avec le test en IO 300h

;******************************************************************************
seg_a           segment byte public
		.
		.
;------------------------------ PROGRAMME PERE ------------------------------

loc_1:          mov     sauve_SP,sp
		.
		.
		.
		int     21h             ;  terminate with al=return code
sto             endp

;---------------------------- int d�tourn�e --------------------------------

int_entry       proc    far
_int:           jmp     _sp	; On contourne...
_SAUVE_SP       dw      0,0	; SP est sauv� dans l'int d�t.
_sp:		push    ax
		push    ds
		push    bx
		push    cx
		push    dx
		pushf                           ; Push flags
ifdef           CARTE_OUT_AL
		mov     dx,300h
		xor     al,al
	        out     dx,al			; Allume les 8 leds.
else
		mov     dx,301h			; Test pour la carte PANO_AT
		out     dx,al			; RAZ du LS393.
endif
		mov     word ptr cs:[_SAUVE_SP],sp
		mov     cx,25
prochain:       pop     ds
		dec     cx
ifdef		CARTE_OUT_AL
else
		mov     dx,300h
		out     dx,al			; Compte le nombre de d�pilage
						; de SP.
endif
		jz      s                      
		cmp     word ptr ds:[adr_ip1],anc_val   ; Si ok on patche.
		jnz     prochain
		mov     word ptr ds:[adr_ip1],nouv_val  ; On y place le patch.
cont:		pop	ds
		cmp     word ptr ds:[adr_ip2],anc_val1
		jnz     cont
		mov     word ptr ds:[adr_ip2],nouv_val1
		xor     bx,bx
		mov     ds,bx                   

	; L'INT 21 n'est pas r�entrante, on ne peut donc pas se servir de
	; la fonction 25h ( set int. vector )   
	
		mov     bx,word ptr cs:data_9      ; Je remets manuellement
		mov     ds:[INT_DET*4],bx          ; en place le vecteur
		mov     bx,word ptr cs:data_9+2    ; de l'INT d�tourn�e.
		mov     ds:[INT_DET*4+2],bx        
ifdef           CARTE_OUT_AL
		mov     dx,300h
		mov     al,0ffh			   ; Carte OUT_AL	
		out     dx,al			   ; Etteint les 8 leds.
endif

;	Routine sonore qui g�n�re 3 bips si la protection est contourn�e.

rebou:	mov     cx, BEEP_DURATION       
		.
		.
		.
		.
	jnz     main_b			; Trois bips...
	
s:              mov     sp,word ptr cs:[_SAUVE_SP]
		popf    
		pop     dx
		pop     cx
		pop     bx
		pop     ds                      
		pop     ax
		jmp     dword ptr cs:data_9

int_entry       endp

;------------ REDUCTION DE LA PLACE OCCUPEE PAR LE PROGRAMME COM ------------

init:                                   ; D�codage du texte.
		.
		.
		.
fin_init        label near

;----------------------- PLACE RESERVEE POUR LA PILE ------------------------

		dw 100 dup (' ')
fin             equ this byte       ; ici le sommet de la pile, SP.
seg_a           ends
		end     start